//
//  CycleView.m
//  CycleDemol
//
//  Created by lanou3g on 16/4/19.
//  Copyright © 2016年 lanou3g. All rights reserved.
//

#import "CycleView.h"

@interface CycleView ()<UIScrollViewDelegate>
//scrollView
@property (nonatomic, strong) UIScrollView *imgScrollView;
//PageControl
@property (nonatomic, strong) UIPageControl *imgPageControl;
//ImgeViewArray
@property (nonatomic, strong) NSMutableArray *imgViewArray;
//存放图片的数组
@property (nonatomic, strong) NSMutableArray *imgArray;
//当前展示的图片下标
@property (nonatomic, assign) NSInteger index;
//定时器
@property (nonatomic, strong) NSTimer *imgTimer;
//点击回调block
@property (nonatomic, copy) void(^tapBlock) (NSInteger index);

@end
@implementation CycleView
//初始化方法
-(instancetype)initWithFrame:(CGRect)frame interVal:(NSTimeInterval)interval
{
    self = [super initWithFrame:frame];
    if (self)
    {
        self.imgViewArray = [NSMutableArray new];
        self.imgArray = [NSMutableArray new];
        self.imgScrollView = [[UIScrollView alloc]initWithFrame: self.bounds];   //不能写view
        self.imgScrollView.contentSize = CGSizeMake(frame.size.width *3, frame.size.height);
        [self addSubview:self.imgScrollView];
        for (int i = 0;  i < 3;  i++)
        {
            UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(frame.size.width *i, 0, frame.size.width, frame.size.height)];
            //添加到父视图/数组
            [self.imgScrollView addSubview:imgView];
            [self.imgViewArray addObject:imgView];
          
                 }
        self.imgScrollView.pagingEnabled = YES;   //分页
        self.imgScrollView.showsHorizontalScrollIndicator =NO; //水平滚动
        
        //代理
        self.imgScrollView.delegate = self;
        //初始化timer
        if (interval <= 0)
        {
            self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
        }else
        {
            self.imgTimer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
        }

      
    }
    return self;
}
//定时器图片滚动
-(void)timerAction {
    [self.imgScrollView setContentOffset:CGPointMake(self.imgScrollView.frame.size.width * 2, 0) animated:YES];
    //改变index
    self.index = (self.index +1) %self.imgNameArray.count;
    
}
//滚动动画结束
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    /*
     回原位
     */
    [self.imgScrollView setContentOffset:CGPointMake(scrollView.frame.size.width, 0) animated:NO];
    [self layoutImages];
}
//图片名数组setter
-(void)setImgNameArray:(NSMutableArray *)imgNameArray {
    if (_imgNameArray != imgNameArray) {
        _imgNameArray = imgNameArray;
        //设置pageControll
        [self.imgPageControl removeFromSuperview];
        self.imgPageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, self.frame.size.height - 40, self.frame.size.width, 40)];
        [self addSubview:self.imgPageControl];
        //属性
        self.imgPageControl.currentPage = 0;
        self.imgPageControl.numberOfPages = _imgNameArray.count;
        //关掉pageControl的响应
        self.imgPageControl.enabled = NO;
        
        
            for (int i = 0; i <imgNameArray.count; i++) {
            UIImage *img = [UIImage imageNamed:imgNameArray[i]];
                //数组里加图片
                [self.imgArray addObject:img];
            if (i < 3) {
                [self.imgViewArray[i] setImage:img];
            }
        }
        //设置当前偏移量  (第一张往左滑是空白即设置偏移量)
        [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
        self.index = 0;
        [self layoutImages];
        
        //点击手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapCycleViewAction:)];
        [(UIImageView *)self.imgViewArray[1] addGestureRecognizer:tap];
        //打开交互
        [(UIImageView *)self.imgViewArray[1] setUserInteractionEnabled:YES];

        
        
    }
}
//点击手势的方法
-(void)tapCycleViewAction: (UIGestureRecognizer *)tap {
    if (self.tapBlock) {
        self.tapBlock(self.index);
    }
}
#pragma mark -UIScrollViewDelegate
//开始拖动
static CGFloat x = 0 ;
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    x = scrollView.contentOffset.x;
    [self.imgTimer setFireDate:[NSDate distantFuture]];
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (x > scrollView.contentOffset.x) {
        [self panToLeft:NO Index:self.index];
    }else if (x < scrollView.contentOffset.x) {
        [self panToLeft:YES Index:self.index];
    }
    //滑动减速后,间隔2秒回重新启动计时器
    [self.imgTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:2]];
}

#pragma mark  - 向左滑动. 向右滑动结束切换
-(void)panToLeft: (BOOL)left Index:(NSInteger)index {
    if (!left) {
        self.index =( index -  1 +self.imgNameArray.count ) % self.imgNameArray.count;
    }else {
        self.index = (index + 1) % self.imgNameArray.count;
    }
    //切换图片调用
    [self layoutImages];
    //回位操作
    [self.imgScrollView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
}
//切换图片
-(void) layoutImages {
    for (int i = 0 ; i < 3; i++) {
        [self.imgViewArray[i] setImage:self.imgArray[(self.index - 1 +i +self.imgNameArray.count) % self.imgNameArray.count]];
    }
}
//index的setter方法 PageControl
-(void)setIndex:(NSInteger)index {
    if (_index != index) {
        _index  = index;
        self.imgPageControl.currentPage = index;
    }
}
//添加block回调
- (void)addTapBlock:(void(^) (NSInteger index)) block {
    self.tapBlock = block;
}
@end
